/**
 * 判断变量是否为空
 * @param {String} str 字符串
 * @param {Boolean} hasTrim 是否执行去除空格判断
 */
function isBlank(str, hasTrim) {
	if (hasTrim!=null && hasTrim) {
		str = $.trim(str);
	}
    if (str != undefined && str != null && str != "" && str!={}) {
        if (jQuery.isArray(str)) {
            if (str.length > 0) {
                return false;
            } else {
                return true;
            }
        }
        return false;
    }
    return true;
}


/**
 * 遍历枚举类获取对象标题
 * 实例：getTitleByKey(PUB_FORMAT.paramJson, value, 'id', 'code');
 * @param {Object} objList 枚举类集合
 * @param {String} value 单元格的值
 * @param {String} objKey 枚举类的key字段名
 * @param {String} objValue 枚举类的value字段名
 */
function getTitleByKey(objList, value, objKey, objValue){
	//如果对象集合为空则返回横线
	if(isBlank(objList) || value==null || value==undefined) return '-';	
	if (isBlank(objKey) || isBlank(objValue)) {
		objKey = 'id';
		objValue = 'value';
	}
	for(var i=0;i<objList.length;i++){
		if(eval('objList['+i+'].' + objKey) == value){
			 return eval('objList['+i+'].' + objValue);
		}
	}
	return '-';
}

/**
 * 格式化比率
 * @param {String} num 需要格式化的数值
 * @param {String} fix 保留的小数位数
 */
function formatRatio(num, fix) {
    //判断传入值是否存在
    if (isBlank(num)) {
        return '—';
    }
    //判断传入数字是否合法，非数字则返回“-”
    num = num.toString().replace(/\$|\,/g, '');
    if (isNaN(num) || num == 0) {
        return '—';
    }
    //判断传入数值是否是在-100到100之间否则提示错误
    if (!isBlank(fix) && fix > 0) {
        return (num * 100).toFixed(fix) + "%";
    }
    return (num * 100) + "%";
}

/**
 * 起始时间是否大于结束时间
 * @param {String} startTime 起始时间(字符串格式：yyyy-mm-dd HH:mm:ss)
 * @param {String} endTime 结束时间(字符串格式：yyyy-mm-dd HH:mm:ss)
 * @return true大于结束时间，false小于结束时间
 */
function isMoreThanEndTime(startTime, endTime){
    var start=new Date(startTime.replace("-", "/").replace("-", "/"));  
    var end=new Date(endTime.replace("-", "/").replace("-", "/"));  
    if(start > end){  
        return true;  
    }  
    return false;  
}  


/**
 * 格式化时间戳为yyyy-MM-dd HH:mm:ss
 * @param {String} dataFmt 时间戳值
 * @param {Boolean} hasTime true显示时分秒，false不显示时分秒
 * @return {String} 年-月-日 [时:分:秒]
 */
function formatDate(dataFmt, hasTime) {
	if (isBlank(dataFmt)) {
		return dataFmt;
	}
    var now = new Date(dataFmt);
    var year =  ( now.getYear() < 1900 ) ? ( 1900 + now.getYear() ) : now.getYear();
    var month = now.getMonth() + 1;
    var date = now.getDate();
    var hour = now.getHours();
    var minute = now.getMinutes();
    var second = now.getSeconds();
    if (hasTime==false || hasTime=='false') 
    	return year + "-" + month + "-" + date;
    return year + "-" + month + "-" + date + " " + hour + ":" + minute + ":" + second;
}

/**
 * 货币格式化
 * @param {double} num 货币
 */
function formatCurrency(num) {  
	if (isBlank(num)) {
		return 0.00;
	}
    num = num.toString().replace(/\$|\,/g,'');  
    if(isNaN(num))  
        num = "0";  
    sign = (num == (num = Math.abs(num)));  
    num = Math.floor(num*100+0.50000000001);  
    cents = num%100;  
    num = Math.floor(num/100).toString();  
    if(cents<10)  
    cents = "0" + cents;  
    for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)  
    num = num.substring(0,num.length-(4*i+3))+','+  
    num.substring(num.length-(4*i+3));  
    return (((sign)?'':'-') + num + '.' + cents);  
}


/**
 * 通用格式化工具类
 */
var funcUtil = {
	/**
	 * 将请求到的数据转换成easyUI的json格式
	 * @param json
	 *        resultData 需要转换的数据
	 *        idField id字段
	 *        textField 文本字段
	 *        delField 删除标记字段
	 *        parentIdField 父级ID字段
	 *        superParentId 顶级节点值
	 *        state 节点的闭合状态，布尔值，true展开/ false闭合,默认false
	 *
	 * @returns 返回转换后的数据
	 */
	changeEasyUITree : 	function(json) {
	    //数据
	    var resultData = json.resultData;
	    //ID的字段
	    var idField = json.idField;
	    //名称字段
	    var textField = json.textField;
	    //父级id字段
	    var parentIdField = json.parentIdField;
	    //boolean类型，true展开/ false闭合,默认false
	    var state = false;
	    if (json.state != undefined && json.state == true) {
	        state = true
	    }
	    //删除字段
	    var delField = json.delField;
	    //顶级节点
	    var topsArray = funcUtil.getDataParents({
	        resultData: resultData,
	        idField: idField,
	        parentIdField: parentIdField,
	        delField: delField
	    });
	
	    return funcUtil.funcJson(topsArray, resultData, idField, textField, parentIdField,
	        state, delField);
	},
	/**
	 * 获取数据中最顶级的数据
	 * @param json 数据
	 *        json.resultData 数据
	 *        json.idField id字段
	 *        json.parentIdField 父级ID字段
	 *        json.delField 删除标记字段
	 * @returns
	 */
	getDataParents : function(json){
	    var data = json.resultData;	//数据
	    var idField = json.idField;	//id字段
	    var parentIdField = json.parentIdField; //父级ID字段
	    var delField = json.delField; //删除标记字段
	
	    //顶级节点集合
	    var parentsArray = new Array();
	    //遍历数据
	    for (var i = 0; i < data.length; i++) {
	        //该字段是否存在删除字段，如果存在删除字段，且已经被标记为删除，则continue 进入下个字段的判断
	        if (delField != undefined && delField != null && delField != "") {
	            if (data[i][delField] != 0) {
	                continue;
	            }
	        }
	
	        var noHaveParents = true;
	        //将获取的字段，和数组数据进行对比，查看它的父节点是否在数组中存在
	        for (var j = 0; j < data.length; j++) {
	            //该字段是否存在删除字段，如果存在删除字段，且已经被标记为删除，则continue 进入下个字段的判断
	            if (delField != undefined && delField != null && delField != "") {
	                if (data[i][delField] != 0) {
	                    continue;
	                }
	            }
	            if (data[i][parentIdField] == data[j][idField]) {
	                noHaveParents = false;
	                break;
	            }
	        }
	        //如果数据的父节点ID在数组数据中没有，则进行进一步判断
	        if (noHaveParents) {
	            var noExistParents = true;
	            //判断在父节点数组中是否已存在这个节点了，如果不存在则添加
	            for (var n = 0; n < parentsArray.length; n++) {
	                if (data[i][idField] == parentsArray[n][idField]) {
	                    noExistParents = false;
	                    break;
	                }
	            }
	            if (noExistParents) {
	                parentsArray.push(data[i]);
	            }
	        }
	    }
	    return parentsArray;
	},
	/**
	 * 转换为easyui格式回调函数
	 * data 子分类集合
	 * resultData 原json集合 i
	 * dField id的字段
	 * textField 标题的字段
	 * parentIdField 父级id的字段
	 * state 阶段状态 true 全部展开，false全部关闭
	 * delField 删除标记
	 */
	funcJson : function(data, resultData, idField, textField, parentIdField, state, delField){
	    if (!data) {
	        return;
	    }
	    for (var j = 0; j < data.length; j++) {
	        data[j].id = data[j][idField]; // 添加id属性
	        data[j].text = data[j][textField]; // 添加text属性
	        var newDataList = new Array();
	        for (var i = 0; i < resultData.length; i++) {
	            if (resultData[i][parentIdField] == data[j][idField]) {
	                if (delField != undefined && delField != null && delField != "") {
	                    if (resultData[i][delField] != 1) {
	                        newDataList.push(resultData[i]);
	                    }
	                } else {
	                    newDataList.push(resultData[i]);
	                }
	            }
	        }
	        if (newDataList.length > 0) {
	            if (state == true) {
	                data[j].state = "open";
	            } else {
	                data[j].state = "closed";
	            }
	            data[j].children = funcUtil.funcJson(newDataList, resultData, idField,
	                textField, parentIdField, state, delField); // 添加children属性
	        }
	    }
	    return data;
	},
	/**
	 * 为下拉框赋值没有选择项时显示的默认操作
	 * @param {Object} data 数据对象
	 * @param {String} hint 输入框为空时的提示信息
	 * @param {String} objKey 下拉选项的key值
	 * @param {String} objValue 下拉选项的value值
	 */
	addNullTitleToCombo : function(data, hint, objKey, objValue, parentIdField, delField){
		var newData = [];
		
		objKey = isBlank(objKey) ? "id" : objKey;
		objValue = isBlank(objValue) ? "value" : objValue;
		hint = isBlank(hint) ? "请选择" : hint;
		if (!isBlank(parentIdField) && !isBlank(delField)) {
			var firstOption = '{"' + objKey + '" : null,"'
						  + objValue + '":"' + hint + '","'
						  + parentIdField + '": "0", "'
						  + delField + '" : "", "state" : "true" }';
			var firstOptionObj =  eval('(' + firstOption + ')');
			newData.push(firstOptionObj);
		}else{
			var firstOption = '{"' + objKey + '" : null,"'
						  + objValue + '":"' + hint + '"}';
			var firstOptionObj =  eval('(' + firstOption + ')');
			newData.push(firstOptionObj);
		}
		
		if(isBlank(data)) return newData;
		if(typeof data === 'object'){
			for(var i=0; i<data.length; i++){
				newData.push(data[i]);
			}
		}
		return newData;
	}
}